/* ! npm.im/iphone-inline-video */
var makeVideoPlayableInline = function() {
    "use strict";

    /* ! npm.im/intervalometer */
    function e(e, n, r, i) {
        function t(r) {
            d = n(t, i), e(r - (a || r)), a = r
        }

        var d, a;
        return {
            start: function() {
                d || t(0)
            },
            stop: function() {
                r(d), d = null, a = 0
            }
        }
    }

    function n(n) {
        return e(n, requestAnimationFrame, cancelAnimationFrame)
    }

    function r(e, n, r, i) {
        function t(n) {
            Boolean(e[r]) === Boolean(i) && n.stopImmediatePropagation(), delete e[r]
        }

        return e.addEventListener(n, t, !1), t
    }

    function i(e, n, r, i) {
        function t() {
            return r[n]
        }

        function d(e) {
            r[n] = e
        }

        i && d(e[n]), Object.defineProperty(e, n, {
            get: t,
            set: d
        })
    }

    function t(e, n, r) {
        r.addEventListener(n, function() {
            return e.dispatchEvent(new Event(n))
        })
    }

    function d(e, n) {
        Promise.resolve().then(function() {
            e.dispatchEvent(new Event(n))
        })
    }

    function a(e) {
        var n = new Audio;
        return t(e, "play", n), t(e, "playing", n), t(e, "pause", n), n.crossOrigin = e.crossOrigin, n.src = e.src || e.currentSrc || "data:", n
    }

    function o(e, n, r) {
        (m || 0) + 200 < Date.now() && (e[g] = !0, m = Date.now()), r || (e.currentTime = n), A[++k % 3] = 100 * n | 0
    }

    function u(e) {
        return e.driver.currentTime >= e.video.duration
    }

    function s(e) {
        var n = this;
        n.video.readyState >= n.video.HAVE_FUTURE_DATA ? (n.hasAudio || (n.driver.currentTime = n.video.currentTime + e * n.video.playbackRate / 1e3, n.video.loop && u(n) && (n.driver.currentTime = 0)), o(n.video, n.driver.currentTime)) : n.video.networkState !== n.video.NETWORK_IDLE || n.video.buffered.length || n.video.load(), n.video.ended && (delete n.video[g], n.video.pause(!0))
    }

    function c() {
        var e = this,
            n = e[b];
        return e.webkitDisplayingFullscreen ? void e[E]() : ("data:" !== n.driver.src && n.driver.src !== e.src && (o(e, 0, !0), n.driver.src = e.src), void(e.paused && (n.paused = !1, e.buffered.length || e.load(), n.driver.play(), n.updater.start(), n.hasAudio || (d(e, "play"), n.video.readyState >= n.video.HAVE_ENOUGH_DATA && d(e, "playing")))))
    }

    function v(e) {
        var n = this,
            r = n[b];
        r.driver.pause(), r.updater.stop(), n.webkitDisplayingFullscreen && n[T](), r.paused && !e || (r.paused = !0, r.hasAudio || d(n, "pause"), n.ended && (n[g] = !0, d(n, "ended")))
    }

    function p(e, r) {
        var i = e[b] = {};
        i.paused = !0, i.hasAudio = r, i.video = e, i.updater = n(s.bind(i)), r ? i.driver = a(e) : (e.addEventListener("canplay", function() {
            e.paused || d(e, "playing")
        }), i.driver = {
            src: e.src || e.currentSrc || "data:",
            muted: !0,
            paused: !0,
            pause: function() {
                i.driver.paused = !0
            },
            play: function() {
                i.driver.paused = !1, u(i) && o(e, 0)
            },
            get ended() {
                return u(i)
            }
        }), e.addEventListener("emptied", function() {
            var n = !i.driver.src || "data:" === i.driver.src;
            i.driver.src && i.driver.src !== e.src && (o(e, 0, !0), i.driver.src = e.src, n ? i.driver.play() : i.updater.stop())
        }, !1), e.addEventListener("webkitbeginfullscreen", function() {
            e.paused ? r && !i.driver.buffered.length && i.driver.load() : (e.pause(), e[E]())
        }), r && (e.addEventListener("webkitendfullscreen", function() {
            i.driver.currentTime = e.currentTime
        }), e.addEventListener("seeking", function() {
            A.indexOf(100 * e.currentTime | 0) < 0 && (i.driver.currentTime = e.currentTime)
        }))
    }

    function l(e) {
        var n = e[b];
        e[E] = e.play, e[T] = e.pause, e.play = c, e.pause = v, i(e, "paused", n.driver), i(e, "muted", n.driver, !0), i(e, "playbackRate", n.driver, !0), i(e, "ended", n.driver), i(e, "loop", n.driver, !0), r(e, "seeking"), r(e, "seeked"), r(e, "timeupdate", g, !1), r(e, "ended", g, !1)
    }

    function f(e, n, r) {
        void 0 === n && (n = !0), void 0 === r && (r = !0), r && !h || e[b] || (p(e, n), l(e), e.classList.add("IIV"), !n && e.autoplay && e.play(), /iPhone|iPod|iPad/.test(navigator.platform) || console.warn("iphone-inline-video is not guaranteed to work in emulated environments"))
    }

    var m, y = "undefined" == typeof Symbol ? function(e) {
            return "@" + (e || "@") + Math.random()
        } : Symbol,
        h = "object-fit" in document.head.style && /iPhone|iPod/i.test(navigator.userAgent) && !matchMedia("(-webkit-video-playable-inline)").matches,
        b = y(),
        g = y(),
        E = y("nativeplay"),
        T = y("nativepause"),
        A = [],
        k = 0;
    return f.isWhitelisted = h, f
}();